package org.me.servlet;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Date;
import java.util.List;
import java.util.Properties;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;
import org.me.entityBeans.TClientes;
import org.me.entityBeans.TDepartamentos;
import org.me.entityBeans.TDistritos;
import org.me.entityBeans.TOcupaciones;
import org.me.entityBeans.TPaises;
import org.me.entityBeans.TProvincias;
import org.me.service.ClienteServiceHibernate;
import org.me.service.DepartamentoServiceHibernate;
import org.me.service.DistritoServiceHibernate;
import org.me.service.OcupacionServiceHibernate;
import org.me.service.PaisServiceHibernate;
import org.me.service.ProvinciaServiceHibernate;
import org.me.utileria.Utileria;

//Usado por mantenimientoClientes.xhtml
public class MantenimientoClientesController {
    private ClienteServiceHibernate clienteServiceHibernateImpl;    
    private Integer idCliente;
    private String nomCliente;
    private String apePaterno;
    private String apeMaterno;
    private Integer dni;
    private Integer dni_Editar;//para compararlo al momento de grabar una actualizacion
    private String ruc;
    private String ruc_Editar;
    //private String razonSocial;    
    private String numeroMovistar;
    private String numeroClaro;
    private String numeroNextel;
    private String numeroRPM;
    private String numeroRPC;
    private String comentarios;
    private String email;
    private String centroTrabajo;    
    private Date fechaNacimiento;
    private String estadoCivil;//ESCOGER(E), SOLTERO(S), CASADO(C), VIUDO(V), DIVORCIADO(D)
    
    private String otrosCentroTrabajo;//datos adicionales    
    
    private String direccionDomicilio;
    private String fonoFijoDomicilio;
    private String referenciaDireccionDomicilio;   
    private Short idPaisDomicilio;    
    private Short idDepartamentoDomicilio;
    private Short idProvinciaDomicilio;
    private Short idDistritoDomicilio;
    
    private String direccionTrabajo;
    private String fonoFijoTrabajo;
    private String referenciaDireccionTrabajo;   
    private Short idPaisTrabajo;    
    private Short idDepartamentoTrabajo;
    private Short idProvinciaTrabajo;
    private Short idDistritoTrabajo;
    
    private Short idOcupacion;
    
    private Date fechaCreacionCte;
    
    private TClientes tClientes;//Entity bean inyectado para luego ser seteado con las propiedades de esta clase
        
    private List<SelectItem> listaPaisesSelectItemDomici;//mostrar paises al cliente por AJAX
    private List<SelectItem> listaDepartamentosSelectItemDomici;
    private List<SelectItem> listaProvinciasSelectItemDomici;
    private List<SelectItem> listaDistritosSelectItemDomici;
    
    private List<SelectItem> listaPaisesSelectItemTraba;//mostrar paises al cliente por AJAX
    private List<SelectItem> listaDepartamentosSelectItemTraba;
    private List<SelectItem> listaProvinciasSelectItemTraba;
    private List<SelectItem> listaDistritosSelectItemTraba;
    
    private List<SelectItem> listaPaisesSelectItemGeneral;//lo utiliza para domicilio y trabajo
    private List<SelectItem> listaDepartamentosSelectItemGeneral;
    private List<SelectItem> listaProvinciasSelectItemGeneral;
    private List<SelectItem> listaDistritosSelectItemGeneral;
    private List<SelectItem> listaOcupacionesSelectItem;
    
    private List<TPaises> listaBeansPaisesGeneral;//lo utiliza para domicilio y trabajo
    private List<TDepartamentos> listaBeansDepartamentosGeneral;
   
    private List<TProvincias> listaBeansProvinciasGeneral;
    private List<TDistritos> listaBeansDistritosGeneral;
    private List<TOcupaciones> listaBeansOcupaciones;
    
    
    private String clienteExiste;//mostrar si el cliente ya existe al cliente por AJAX        
    private String color;   //DNI duplicado
    
    private String clienteExiste2;//RUC   duplicado    
    private String color2;  //RUC duplicado  

    private String rbEsCasaPropia;//Radio Button  
    private String rbEstadoOcupacion;//Radio Button(Ejerciendo, Independiente)  
    
    private Properties properties;    
    private Integer numClientes;
    
    private Integer flagEditar;//Saber cuando en que estado se encuentra Nuevo o Actualizando
    
    private List beanList;//lista de Clientes
    
    private Utileria utileria;   
    
    private PaisServiceHibernate paisServiceHibernateImpl;
    private DepartamentoServiceHibernate departamentoServiceHibernateImpl;
    private ProvinciaServiceHibernate provinciaServiceHibernateImpl;    
    private DistritoServiceHibernate distritoServiceHibernateImpl;    
    private OcupacionServiceHibernate ocupacionServiceHibernateImpl;
    
    public MantenimientoClientesController(ClienteServiceHibernate clienteServiceHibernateImpl, PaisServiceHibernate paisServiceHibernateImpl, 
                DepartamentoServiceHibernate departamentoServiceHibernateImpl, ProvinciaServiceHibernate provinciaServiceHibernateImpl,  
                DistritoServiceHibernate distritoServiceHibernateImpl, OcupacionServiceHibernate ocupacionServiceHibernateImpl, Utileria utileria) 
    {            
        this.clienteServiceHibernateImpl = clienteServiceHibernateImpl;
        this.paisServiceHibernateImpl = paisServiceHibernateImpl;
        this.departamentoServiceHibernateImpl = departamentoServiceHibernateImpl;
        this.provinciaServiceHibernateImpl = provinciaServiceHibernateImpl;
        this.distritoServiceHibernateImpl = distritoServiceHibernateImpl;
        this.ocupacionServiceHibernateImpl = ocupacionServiceHibernateImpl;
        
        this.flagEditar = 0;
        
        this.setBeanList(this.clienteServiceHibernateImpl.findAllClientes()); //traemos todos los clientes para ser seteado en beanList     
        this.numClientes = this.beanList.size();
        
        this.utileria = utileria;
        
        //Cargamos por defecto los combos con PERU, AREQUIPA, AREQUIPA, AREQUIPA (ID = 1)
        Short idPa, idDpto, idProvin;
        idPa = idDpto = idProvin = 1;
        this.cargarCombosIniciales(idDpto, idProvin, idPa);//ID de AQP       
        
        //this.numClientes = this.beanList.size();
        
        this.properties = new Properties();
        try{
           this.properties.load(new FileInputStream("resources/messages.properties"));
        }
        catch(IOException  e){
            e.printStackTrace();
        }           
    }   

    private void cargarCombosIniciales(Short idDpto, Short idProvin, Short idPa)
    {
        //Comprobar que se Trae en orden segun ID
        this.listaBeansPaisesGeneral = this.paisServiceHibernateImpl.findAllPaises(); //1ro PERU        
        
        //cargamos Dptos Peru
        this.idPaisDomicilio = this.idPaisTrabajo = idPa; //1er Valor x defecto a mostrar en el combo
        this.cargaComboDepartamentosDomici(null);//realiza SelectItem
        this.cargaComboDepartamentosTraba(null);
       
        //cargamos Provincias de AQP
        this.idDepartamentoDomicilio = this.idDepartamentoTrabajo = idDpto; //1er Valor x defecto a mostrar en el combo
        this.cargaComboProvinciasDomici(null);
        this.cargaComboProvinciasTraba(null);
       
        //cargamos Distritos de AQP
        this.idProvinciaDomicilio = this.idProvinciaTrabajo = idProvin; //1er Valor x defecto a mostrar en el combo
        this.cargaComboDistritosDomici(null);
        this.cargaComboDistritosTraba(null);
       
        //Ocupaciones
        this.listaBeansOcupaciones = this.ocupacionServiceHibernateImpl.findAllOcupaciones();
        
        //SelectItem que faltan
        this.listaPaisesSelectItemDomici = this.listaPaisesSelectItemTraba = this.utileria.convertListBeansPaisesToSelectItem(this.listaBeansPaisesGeneral) ;             
        this.listaOcupacionesSelectItem = this.utileria.convertListBeansOcupacionesToSelectItem(this.listaBeansOcupaciones);
    }

    public List getBeanList() {
        return beanList;
    }

    public void setBeanList(List beanList) {
        this.beanList = beanList;
    }

    public String getEstadoCivil() {
        return estadoCivil;
    }

    public void setEstadoCivil(String estadoCivil) {
        this.estadoCivil = estadoCivil;
    }

    public String getClienteExiste2() {
        return clienteExiste2;
    }

    public void setClienteExiste2(String clienteExiste2) {
        this.clienteExiste2 = clienteExiste2;
    }

    public String getColor2() {
        return color2;
    }

    public void setColor2(String color2) {
        this.color2 = color2;
    }

   

    public Date getFechaNacimiento() {
        return fechaNacimiento;
    }

    public void setFechaNacimiento(Date fechaNacimiento) {
        this.fechaNacimiento = fechaNacimiento;
    }

    public String getOtrosCentroTrabajo() {
        return otrosCentroTrabajo;
    }

    public void setOtrosCentroTrabajo(String otrosCentroTrabajo) {
        this.otrosCentroTrabajo = otrosCentroTrabajo;
    }

    public String getRbEstadoOcupacion() {
        return rbEstadoOcupacion;
    }

    public void setRbEstadoOcupacion(String rbEstadoOcupacion) {
        this.rbEstadoOcupacion = rbEstadoOcupacion;
    }

    public String getCentroTrabajo() {
        return centroTrabajo;
    }

    public void setCentroTrabajo(String centroTrabajo) {
        this.centroTrabajo = centroTrabajo;
    }
   

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public OcupacionServiceHibernate getOcupacionServiceHibernateImpl() {
        return ocupacionServiceHibernateImpl;
    }

    public void setOcupacionServiceHibernateImpl(OcupacionServiceHibernate ocupacionServiceHibernateImpl) {
        this.ocupacionServiceHibernateImpl = ocupacionServiceHibernateImpl;
    }

    public List<SelectItem> getListaOcupacionesSelectItem() {
        return listaOcupacionesSelectItem;
    }

    public void setListaOcupacionesSelectItem(List<SelectItem> listaOcupacionesSelectItem) {
        this.listaOcupacionesSelectItem = listaOcupacionesSelectItem;
    }

    public Short getIdOcupacion() {
        return idOcupacion;
    }

    public void setIdOcupacion(Short idOcupacion) {
        this.idOcupacion = idOcupacion;
    }

    public List<TOcupaciones> getListaBeansOcupaciones() {
        return listaBeansOcupaciones;
    }

    public void setListaBeansOcupaciones(List<TOcupaciones> listaBeansOcupaciones) {
        this.listaBeansOcupaciones = listaBeansOcupaciones;
    }

    public List<TDepartamentos> getListaBeansDepartamentosGeneral() {
        return listaBeansDepartamentosGeneral;
    }

    public void setListaBeansDepartamentosGeneral(List<TDepartamentos> listaBeansDepartamentosGeneral) {
        this.listaBeansDepartamentosGeneral = listaBeansDepartamentosGeneral;
    }

    public List<TDistritos> getListaBeansDistritosGeneral() {
        return listaBeansDistritosGeneral;
    }

    public void setListaBeansDistritosGeneral(List<TDistritos> listaBeansDistritosGeneral) {
        this.listaBeansDistritosGeneral = listaBeansDistritosGeneral;
    }

    public List<TPaises> getListaBeansPaisesGeneral() {
        return listaBeansPaisesGeneral;
    }

    public void setListaBeansPaisesGeneral(List<TPaises> listaBeansPaisesGeneral) {
        this.listaBeansPaisesGeneral = listaBeansPaisesGeneral;
    }

    public List<TProvincias> getListaBeansProvinciasGeneral() {
        return listaBeansProvinciasGeneral;
    }

    public void setListaBeansProvinciasGeneral(List<TProvincias> listaBeansProvinciasGeneral) {
        this.listaBeansProvinciasGeneral = listaBeansProvinciasGeneral;
    }

    public List<SelectItem> getListaDepartamentosSelectItemGeneral() {
        return listaDepartamentosSelectItemGeneral;
    }

    public void setListaDepartamentosSelectItemGeneral(List<SelectItem> listaDepartamentosSelectItemGeneral) {
        this.listaDepartamentosSelectItemGeneral = listaDepartamentosSelectItemGeneral;
    }

    public List<SelectItem> getListaDistritosSelectItemGeneral() {
        return listaDistritosSelectItemGeneral;
    }

    public void setListaDistritosSelectItemGeneral(List<SelectItem> listaDistritosSelectItemGeneral) {
        this.listaDistritosSelectItemGeneral = listaDistritosSelectItemGeneral;
    }

    public List<SelectItem> getListaPaisesSelectItemGeneral() {
        return listaPaisesSelectItemGeneral;
    }

    public void setListaPaisesSelectItemGeneral(List<SelectItem> listaPaisesSelectItemGeneral) {
        this.listaPaisesSelectItemGeneral = listaPaisesSelectItemGeneral;
    }

    public List<SelectItem> getListaProvinciasSelectItemGeneral() {
        return listaProvinciasSelectItemGeneral;
    }

    public void setListaProvinciasSelectItemGeneral(List<SelectItem> listaProvinciasSelectItemGeneral) {
        this.listaProvinciasSelectItemGeneral = listaProvinciasSelectItemGeneral;
    }

   
    public List<SelectItem> getListaDepartamentosSelectItemDomici() {
        return listaDepartamentosSelectItemDomici;
    }

    public void setListaDepartamentosSelectItemDomici(List<SelectItem> listaDepartamentosSelectItemDomici) {
        this.listaDepartamentosSelectItemDomici = listaDepartamentosSelectItemDomici;
    }

    public List<SelectItem> getListaDepartamentosSelectItemTraba() {
        return listaDepartamentosSelectItemTraba;
    }

    public void setListaDepartamentosSelectItemTraba(List<SelectItem> listaDepartamentosSelectItemTraba) {
        this.listaDepartamentosSelectItemTraba = listaDepartamentosSelectItemTraba;
    }

    public List<SelectItem> getListaDistritosSelectItemDomici() {
        return listaDistritosSelectItemDomici;
    }

    public void setListaDistritosSelectItemDomici(List<SelectItem> listaDistritosSelectItemDomici) {
        this.listaDistritosSelectItemDomici = listaDistritosSelectItemDomici;
    }

    public List<SelectItem> getListaDistritosSelectItemTraba() {
        return listaDistritosSelectItemTraba;
    }

    public void setListaDistritosSelectItemTraba(List<SelectItem> listaDistritosSelectItemTraba) {
        this.listaDistritosSelectItemTraba = listaDistritosSelectItemTraba;
    }

    public List<SelectItem> getListaPaisesSelectItemDomici() {
        return listaPaisesSelectItemDomici;
    }

    public void setListaPaisesSelectItemDomici(List<SelectItem> listaPaisesSelectItemDomici) {
        this.listaPaisesSelectItemDomici = listaPaisesSelectItemDomici;
    }

    public List<SelectItem> getListaPaisesSelectItemTraba() {
        return listaPaisesSelectItemTraba;
    }

    public void setListaPaisesSelectItemTraba(List<SelectItem> listaPaisesSelectItemTraba) {
        this.listaPaisesSelectItemTraba = listaPaisesSelectItemTraba;
    }

    public List<SelectItem> getListaProvinciasSelectItemDomici() {
        return listaProvinciasSelectItemDomici;
    }

    public void setListaProvinciasSelectItemDomici(List<SelectItem> listaProvinciasSelectItemDomici) {
        this.listaProvinciasSelectItemDomici = listaProvinciasSelectItemDomici;
    }

    public List<SelectItem> getListaProvinciasSelectItemTraba() {
        return listaProvinciasSelectItemTraba;
    }

    public void setListaProvinciasSelectItemTraba(List<SelectItem> listaProvinciasSelectItemTraba) {
        this.listaProvinciasSelectItemTraba = listaProvinciasSelectItemTraba;
    }

    public String getDireccionDomicilio() {
        return direccionDomicilio;
    }

    public void setDireccionDomicilio(String direccionDomicilio) {
        this.direccionDomicilio = direccionDomicilio;
    }

    public String getDireccionTrabajo() {
        return direccionTrabajo;
    }

    public void setDireccionTrabajo(String direccionTrabajo) {
        this.direccionTrabajo = direccionTrabajo;
    }

    public String getFonoFijoDomicilio() {
        return fonoFijoDomicilio;
    }

    public void setFonoFijoDomicilio(String fonoFijoDomicilio) {
        this.fonoFijoDomicilio = fonoFijoDomicilio;
    }

    public String getFonoFijoTrabajo() {
        return fonoFijoTrabajo;
    }

    public void setFonoFijoTrabajo(String fonoFijoTrabajo) {
        this.fonoFijoTrabajo = fonoFijoTrabajo;
    }

    public Short getIdDepartamentoDomicilio() {
        return idDepartamentoDomicilio;
    }

    public void setIdDepartamentoDomicilio(Short idDepartamentoDomicilio) {
        this.idDepartamentoDomicilio = idDepartamentoDomicilio;
    }

    public Short getIdDepartamentoTrabajo() {
        return idDepartamentoTrabajo;
    }

    public void setIdDepartamentoTrabajo(Short idDepartamentoTrabajo) {
        this.idDepartamentoTrabajo = idDepartamentoTrabajo;
    }

    public Short getIdDistritoDomicilio() {
        return idDistritoDomicilio;
    }

    public void setIdDistritoDomicilio(Short idDistritoDomicilio) {
        this.idDistritoDomicilio = idDistritoDomicilio;
    }

    public Short getIdDistritoTrabajo() {
        return idDistritoTrabajo;
    }

    public void setIdDistritoTrabajo(Short idDistritoTrabajo) {
        this.idDistritoTrabajo = idDistritoTrabajo;
    }

    public Short getIdPaisDomicilio() {
        return idPaisDomicilio;
    }

    public void setIdPaisDomicilio(Short idPaisDomicilio) {
        this.idPaisDomicilio = idPaisDomicilio;
    }

    public Short getIdPaisTrabajo() {
        return idPaisTrabajo;
    }

    public void setIdPaisTrabajo(Short idPaisTrabajo) {
        this.idPaisTrabajo = idPaisTrabajo;
    }

    public Short getIdProvinciaDomicilio() {
        return idProvinciaDomicilio;
    }

    public void setIdProvinciaDomicilio(Short idProvinciaDomicilio) {
        this.idProvinciaDomicilio = idProvinciaDomicilio;
    }

    public Short getIdProvinciaTrabajo() {
        return idProvinciaTrabajo;
    }

    public void setIdProvinciaTrabajo(Short idProvinciaTrabajo) {
        this.idProvinciaTrabajo = idProvinciaTrabajo;
    }

    public String getReferenciaDireccionDomicilio() {
        return referenciaDireccionDomicilio;
    }

    public void setReferenciaDireccionDomicilio(String referenciaDireccionDomicilio) {
        this.referenciaDireccionDomicilio = referenciaDireccionDomicilio;
    }

    public String getReferenciaDireccionTrabajo() {
        return referenciaDireccionTrabajo;
    }

    public void setReferenciaDireccionTrabajo(String referenciaDireccionTrabajo) {
        this.referenciaDireccionTrabajo = referenciaDireccionTrabajo;
    }

   
    public String getComentarios() {
        return comentarios;
    }

    public void setComentarios(String comentarios) {
        this.comentarios = comentarios;
    }
   
   

    public String getRbEsCasaPropia() {
        return rbEsCasaPropia;
    }

    public void setRbEsCasaPropia(String rbEsCasaPropia) {
        this.rbEsCasaPropia = rbEsCasaPropia;
    }

    public String getNumeroClaro() {
        return numeroClaro;
    }

    public void setNumeroClaro(String numeroClaro) {
        this.numeroClaro = numeroClaro;
    }

    public String getNumeroMovistar() {
        return numeroMovistar;
    }

    public void setNumeroMovistar(String numeroMovistar) {
        this.numeroMovistar = numeroMovistar;
    }

    public String getNumeroNextel() {
        return numeroNextel;
    }

    public void setNumeroNextel(String numeroNextel) {
        this.numeroNextel = numeroNextel;
    }

    public String getNumeroRPC() {
        return numeroRPC;
    }

    public void setNumeroRPC(String numeroRPC) {
        this.numeroRPC = numeroRPC;
    }

    public String getNumeroRPM() {
        return numeroRPM;
    }

    public void setNumeroRPM(String numeroRPM) {
        this.numeroRPM = numeroRPM;
    }

    public ProvinciaServiceHibernate getProvinciaServiceHibernateImpl() {
        return provinciaServiceHibernateImpl;
    }

    public void setProvinciaServiceHibernateImpl(ProvinciaServiceHibernate provinciaServiceHibernateImpl) {
        this.provinciaServiceHibernateImpl = provinciaServiceHibernateImpl;
    }  

   
    
    public DistritoServiceHibernate getDistritoServiceHibernateImpl() {
        return distritoServiceHibernateImpl;
    }

    public void setDistritoServiceHibernateImpl(DistritoServiceHibernate distritoServiceHibernateImpl) {
        this.distritoServiceHibernateImpl = distritoServiceHibernateImpl;
    }

    public PaisServiceHibernate getPaisServiceHibernateImpl() {
        return paisServiceHibernateImpl;
    }

    public void setPaisServiceHibernateImpl(PaisServiceHibernate paisServiceHibernateImpl) {
        this.paisServiceHibernateImpl = paisServiceHibernateImpl;
    }
    
   
   
    public DepartamentoServiceHibernate getDepartamentoServiceHibernateImpl() {
        return departamentoServiceHibernateImpl;
    }

    public void setDepartamentoServiceHibernateImpl(DepartamentoServiceHibernate departamentoServiceHibernateImpl) {
        this.departamentoServiceHibernateImpl = departamentoServiceHibernateImpl;
    }   

    public Utileria getUtileria() {
        return utileria;
    }

    public void setUtileria(Utileria utileria) {
        this.utileria = utileria;
    }  
   
    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }
 
    public String getApePaterno() {
        return apePaterno;
    }

    public void setApePaterno(String apePaterno) {
        this.apePaterno = apePaterno;
    }

    public ClienteServiceHibernate getClienteServiceHibernateImpl() {
        return clienteServiceHibernateImpl;
    }

    public void setClienteServiceHibernateImpl(ClienteServiceHibernate clienteServiceHibernateImpl) {
        this.clienteServiceHibernateImpl = clienteServiceHibernateImpl;
    }

    public Integer getIdCliente() {
        return idCliente;
    }

    public void setIdCliente(Integer idCliente) {
        this.idCliente = idCliente;
    }

    public String getNomCliente() {
        return nomCliente;
    }

    public void setNomCliente(String nomCliente) {
        this.nomCliente = nomCliente;
    }

    public Integer getNumClientes() {
        return numClientes;
    }

    public void setNumClientes(Integer numClientes) {
        this.numClientes = numClientes;
    }

    public TClientes gettClientes() {
        return tClientes;
    }

    public void settClientes(TClientes tClientes) {
        this.tClientes = tClientes;
    }

    public String getClienteExiste() {
        return clienteExiste;
    }

    public void setClienteExiste(String clienteExiste) {
        this.clienteExiste = clienteExiste;
    }
   
    public Properties getProperties() {
        return properties;
    }

    public void setProperties(Properties properties) {
        this.properties = properties;
    }

    public String getApeMaterno() {
        return apeMaterno;
    }

    public void setApeMaterno(String apeMaterno) {
        this.apeMaterno = apeMaterno;
    }
    
    public Integer getDni() {
        return dni;
    }

    public void setDni(Integer dni) {
        this.dni = dni;
    }

//    public String getRazonSocial() {
//        return razonSocial;
//    }
//
//    public void setRazonSocial(String razonSocial) {
//        this.razonSocial = razonSocial;
//    }

    public String getRuc() {
        return ruc;
    }

    public void setRuc(String ruc) {
        this.ruc = ruc;
    }
    
    public void grabaOActualizaCliente(ActionEvent event)
    {          
        //Los datos que vienen de la vista si estan en blanco envia "" como para el RUC x ejm
        //Excepto para los campos que estan deshabilitados, envia null si estan vacios (idCliente ->  readonly="true")
        //Hibernate pasa los datos vacios "" como null al ORACLE
        if( this.flagEditar == 0 ) //Modo Nuevo
        {
            this.comprobarCte();      
            
        }
        else //Modo Editar
        {
            if( this.dni == this.dni_Editar && this.ruc.equals(this.ruc_Editar)) //no cambió al editar
            {
                this.grabaCteBD();
            }
            else
            {
                this.comprobarCte();
            }            
        } 
        
        this.flagEditar = 0;  
    }  
    
    private void comprobarCte()
    {
        int flagDNI, flagRUC;
        
        flagDNI = flagRUC = 0;
        
        flagDNI = this.comprobarCte(1); //Se comprueba que no exista el cliente a través del DNI, el DNI siempre es obligatorio
         
        if( !this.ruc.equals("") ) //si puso RUC
            flagRUC = this.comprobarCte(2);             
        
        if( flagDNI == 0 && flagRUC == 0 ) 
            this.grabaCteBD();            
    }
    
    //Devuelve 1 si Existe 
    private int comprobarCte(int opcion)
    {
        List<TClientes> resultado;
        String dato;
        
        if (opcion == 1)
        {
            resultado = this.getClienteServiceHibernateImpl().findByDNICliente(this.dni);
            dato = "DNI";
        }
        else
        {
            resultado = this.getClienteServiceHibernateImpl().findByRUCCliente(this.ruc);
            dato = "RUC";
        }       
        
        Integer coincidencias = resultado.size();
        
        if ( coincidencias == 1 ) 
        {
            this.clienteExiste = "El " + dato + " digitado ya existe en la Base de Datos";
            this.color = "red"; 
            
            return 1;
        }
        else if( coincidencias == 0)
            {
                this.clienteExiste = "";     
                
                return 0; 
            }
        else //mas de una coincidencia
            {
                this.clienteExiste = "Error " + dato + " Repetido varias veces";
                this.color = "red"; 
                
                return 0;
             }
                      
    }  
    
    private void grabaCteBD()
    {
        this.obtenerDatosVista();        
        this.getClienteServiceHibernateImpl().saveOrUpdateCliente(this.tClientes);
        this.limpiarBean();//Valores limpios para el Objeto Cte
        this.clienteExiste = "Cliente registrado correctamente";
        this.color = "green";
        this.setBeanList(this.clienteServiceHibernateImpl.findAllClientes()); //traemos todos los clientes para ser seteado en beanList     
        this.numClientes = this.beanList.size();
    }
    
    private void obtenerDatosVista()
    {
        //Todo viene validado Java Script
        //Datos Generales del Cliente
        Integer idCte = this.idCliente; //puede ser null si es nuevo        
        String nomCli = this.nomCliente;
        String apePater = this.apePaterno;
        String apeMater = this.apeMaterno;   
        Integer dnii = this.dni;
        String rucc = this.ruc;
      //  String razonSoc = this.razonSocial;
        String mail = this.email;
        Date fecNaci = this.fechaNacimiento;
        String estadCivil = this.estadoCivil;
        
        //Celulares
        String movistar = this.numeroMovistar;
        String claro = this.numeroClaro;
        String nextel = this.numeroNextel;
        String rpm = this.numeroRPM;
        String rpc = this.numeroRPC;         
        
        //Ocupacion
        Short idOcupa = this.idOcupacion;        
        TOcupaciones ocupacion = new TOcupaciones();
        ocupacion.setNIdOcupacionPk(idOcupa);
        
        //Estado Ocupacion
        String estadoOcup = this.rbEstadoOcupacion; //1(Independiente), 0(Ejerciendo)
        
        //Datos del Domicilio
        Short idPaisDomi = this.idPaisDomicilio;
        Short idDptoDomi = this.idDepartamentoDomicilio;
        Short idProvinDomi = this.idProvinciaDomicilio;
        Short idDistritoDomi = this.idDistritoDomicilio;
        String dirDomic = this.direccionDomicilio;
        String fijoDomi = this.fonoFijoDomicilio;
        String casaPropia = this.rbEsCasaPropia; //1(Si es casa propia), 0(No es)
        String coment = this.comentarios;
        String referenciaDirDomic = this.referenciaDireccionDomicilio;   
        
        //Entities Domicilio
        TPaises paisDomicilio = new TPaises();        
        TDepartamentos dptoDomicilio = new TDepartamentos();        
        TProvincias provinciaDomicilio = new TProvincias();        
        TDistritos distritoDomicilio = new TDistritos();        
        
        paisDomicilio.setNIdPaisPk(idPaisDomi);
        dptoDomicilio.setNIdDepartamentoPk(idDptoDomi);
        provinciaDomicilio.setNIdProvinciaPk(idProvinDomi);
        distritoDomicilio.setNIdDistritoPk(idDistritoDomi);   
        
        this.tClientes.setNIdCtePk(idCte); 
        this.tClientes.setVNombreCte(nomCli);
        this.tClientes.setVApePaternoCte(apePater);
        this.tClientes.setVApeMaternoCte(apeMater);
        this.tClientes.setNDniCte(dnii);
        
        //if(rucc != 0) //En caso de que no se envio RUC (ya que si se envia en blanco  JSF lo convierte a 0 porque es un dato numerico) 
            //this.tClientes.setNRucCte(rucc);
        
      //  this.tClientes.setVRazonSocialCte(razonSoc);
        this.tClientes.setVRucCte(rucc);
        this.tClientes.setVEmailCte(mail);
        this.tClientes.setDFechaNacimientoCte(fecNaci);
        this.tClientes.setVDireccionDomicilioCte(dirDomic);
        this.tClientes.setvEstadoCivil(estadCivil);
        this.tClientes.setVCelularMovistarCte(movistar);
        this.tClientes.setVCelularClaroCte(claro);
        this.tClientes.setVNextelCte(nextel);
        this.tClientes .setVRpmCte(rpm);                       
        this.tClientes.setVRpcCte(rpc);
        this.tClientes.setNIdPaisDomicilioCteFk(paisDomicilio);
        this.tClientes.setNIdDptoDomicilioCteFk(dptoDomicilio);
        this.tClientes.setNIdProvinciaDomicilCteFk(provinciaDomicilio);
        this.tClientes.setNIdDistritoDomicilioCteFk(distritoDomicilio);
        this.tClientes.setVDireccionDomicilioCte(dirDomic);
        this.tClientes.setVFonoFijoDomicilioCte(fijoDomi);
        this.tClientes.setVCasaPropia(casaPropia);                        
        this.tClientes.setVComentariosNoCasaPropia(coment);
        this.tClientes.setVReferenciaDirCasaCte(referenciaDirDomic);
        this.tClientes.setNIdOcupacionCteFk(ocupacion);
        this.tClientes.setVEstadoOcupacionCte(estadoOcup);         
        
        //Estado Ocupacion ->  1(Independiente), 0(Ejerciendo) 
        if( estadoOcup.equals("0") || !rucc.equals("") ) //Si está ejerciendo ó puso RUC debió poner datos del trabajo, de lo contario se queda en NULL
        {
            //Datos del Centro de Trabajo   se tienen que limpiar estos datos del Entitie al grabar               
            Short idPaisTrab = this.idPaisTrabajo;
            Short idDptoTrab = this.idDepartamentoTrabajo;
            Short idProvinTrab = this.idProvinciaTrabajo;
            Short idDistritoTrab = this.idDistritoTrabajo;        
            String empresa = this.centroTrabajo;
            String dirTrab = this.direccionTrabajo;        
            String fijoTrab = this.fonoFijoTrabajo;       
            String referenciaDirTrab = this.referenciaDireccionTrabajo;
            String otrosTrab = this.otrosCentroTrabajo;
            
            TPaises paisTrabajo = new TPaises();        
            TDepartamentos dptoTrabajo = new TDepartamentos();        
            TProvincias provinciaTrabajo = new TProvincias();        
            TDistritos distritoTrabajo = new TDistritos();
            
            paisTrabajo.setNIdPaisPk(idPaisTrab);
            dptoTrabajo.setNIdDepartamentoPk(idDptoTrab);
            provinciaTrabajo.setNIdProvinciaPk(idProvinTrab);
            distritoTrabajo.setNIdDistritoPk(idDistritoTrab);
        
            this.tClientes.setNIdPaisCentroTrabajoFk(paisTrabajo);
            this.tClientes.setNIdDptoCentroTrabajoFk(dptoTrabajo);
            this.tClientes.setNIdProvinciaCentroTrabaFk(provinciaTrabajo);
            this.tClientes.setNIdDistritoCentroTrabaFk(distritoTrabajo);
            this.tClientes.setVCentroTrabajoCte(empresa);
            this.tClientes.setVDirCentroTrabajCte(dirTrab);        
            this.tClientes.setVFonoCentroTrabajoCte(fijoTrab);          
            this.tClientes.setVReferenciaDirCentrotrabajo(referenciaDirTrab);
            this.tClientes.setvOtrosCentroTrabajo(otrosTrab);            
        }
        
        this.fechaCreacionCte = new Date(); //Fecha actual del sistema
        this.tClientes.setDFechaCreacionCte(this.fechaCreacionCte);
    }
        
    //borra un cte por ajax
    public void delete(ActionEvent event)
    {
        String id = (String)FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("sid2");//recuperamos el id       
               
        this.idCliente = Integer.valueOf(id);
        
        this.tClientes.setNIdCtePk(this.idCliente);        
       
        String mensaje = this.getClienteServiceHibernateImpl().deleteCliente(this.tClientes);
        
        this.limpiarBean();//Valores limpios para el Objeto cte
        if ( mensaje.equals("ok") ) //se hizo el delete correctamente
        {
            this.clienteExiste = "Cliente borrado correctamente";
            this.color = "green";                      
            this.setBeanList(this.clienteServiceHibernateImpl.findAllClientes()); //traemos todos los clientes para ser seteado en beanList     
            this.numClientes = this.beanList.size();            
        }     
        else
        {            
            this.clienteExiste = "El Cliente no pudo borrarse, posible violacion de la Integridad Referencial:    Causas ... " + mensaje;            
            this.color = "red";              
        }   
        
    }
    
    //Cargar los valores a los text de la vista, para poder ser modificados o actualizados
    public void load(ActionEvent event)
    {        
        this.flagEditar = 1;//está en Modo Editar
        this.limpiarBean();//Valores limpios para el Objeto cte en caso venga de un Load anterior
        
        String id = (String)FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("sid1");//recuperamos el id pasado como href      
         
        this.idCliente = Integer.valueOf(id);
        
        //Los datos que vienen de la vista si estan en blanco envia "". como para el RUC x ejm
        //Excepto para los campos que estan deshabilitados, envia null si estan vacios (idCliente ->  readonly="true")
        //Hibernate pasa los datos vacios "" como null al ORACLE        
        TClientes cliente = this.getClienteServiceHibernateImpl().findByIdCliente(this.idCliente);       
        
        //Seteamos los campos para que sean actualizados por el usuario             
        this.setNomCliente(cliente.getVNombreCte());
        this.setApePaterno(cliente.getVApePaternoCte());
        this.setApeMaterno(cliente.getVApeMaternoCte());
        this.setDni(cliente.getNDniCte());
        this.setRuc(cliente.getVRucCte());
      //  this.setRazonSocial(cliente.getVRazonSocialCte());
        this.setEmail(cliente.getVEmailCte());
        this.setFechaNacimiento(cliente.getDFechaNacimientoCte());
        this.setEstadoCivil(cliente.getvEstadoCivil()); 
        this.setNumeroMovistar(cliente.getVCelularMovistarCte());
        this.setNumeroClaro(cliente.getVCelularClaroCte());
        this.setNumeroNextel(cliente.getVNextelCte());
        this.setNumeroRPM(cliente.getVRpmCte());
        this.setNumeroRPC(cliente.getVRpcCte());       
        this.setDireccionDomicilio(cliente.getVDireccionDomicilioCte());
        this.setFonoFijoDomicilio(cliente.getVFonoFijoDomicilioCte());
        this.setRbEsCasaPropia(cliente.getVCasaPropia());
        this.setComentarios(cliente.getVComentariosNoCasaPropia());
        this.setReferenciaDireccionDomicilio(cliente.getVReferenciaDirCasaCte());             
        
        //Combos domicilio
        TPaises paisDomi = cliente.getNIdPaisDomicilioCteFk();
        TDepartamentos dptoDomi = cliente.getNIdDptoDomicilioCteFk();
        TProvincias provinciaDomi = cliente.getNIdProvinciaDomicilCteFk();
        TDistritos distritoDomi = cliente.getNIdDistritoDomicilioCteFk();
       
               
        //El value del selectOneMenu  <h:selectOneMenu value="#{mantenimientoClientesController.idDepartamentoDomicilio}" 
        //indica el valor por defecto que debe mostrar JSF para cada combo
        this.idPaisDomicilio = paisDomi.getNIdPaisPk();
        this.idDepartamentoDomicilio = dptoDomi.getNIdDepartamentoPk();  
        this.idProvinciaDomicilio = provinciaDomi.getNIdProvinciaPk();
        this.idDistritoDomicilio = distritoDomi.getNIdDistritoPk();      
        
        //Ponemos valores a los combos, en el caso de Paises no es necesario, ya que es el 1er combo y siempre utiliza lo que ya se cargo               
        this.cargaComboDepartamentosComun(this.idPaisDomicilio);      
        this.listaDepartamentosSelectItemDomici = this.listaDepartamentosSelectItemGeneral;  
        
        this.cargaComboProvinciasComun(this.idDepartamentoDomicilio);      
        this.listaProvinciasSelectItemDomici = this.listaProvinciasSelectItemGeneral; 
        
        this.cargaComboDistritosComun(this.idProvinciaDomicilio);
        this.listaDistritosSelectItemDomici = this.listaDistritosSelectItemGeneral;
                
        //Combo Ocupacion
        TOcupaciones ocupacion = cliente.getNIdOcupacionCteFk();
        this.idOcupacion = ocupacion.getNIdOcupacionPk();
        
        //Radio Button Ocupacion
        this.setRbEstadoOcupacion(cliente.getVEstadoOcupacionCte());
        
        //Estado Ocupacion ->  1(Independiente), 0(Ejerciendo)           
        if( this.rbEstadoOcupacion.equals("0") || this.ruc != null )//Si esta ejerciendo debio poner datos del trabajo, de lo contario esta en NULL
        {             
            //Combos trabajo
            TPaises paisTra = cliente.getNIdPaisCentroTrabajoFk();
            TDepartamentos dptoTra = cliente.getNIdDptoCentroTrabajoFk();
            TProvincias provinciaTra = cliente.getNIdProvinciaCentroTrabaFk();
            TDistritos distritoTra = cliente.getNIdDistritoCentroTrabaFk();
            
            //El value del selectOneMenu  <h:selectOneMenu value="#{mantenimientoClientesController.idDepartamentoDomicilio}" 
            //indica el valor por defecto que debe mostrar JSF para cada combo
            this.idPaisTrabajo = paisTra.getNIdPaisPk();
            this.idDepartamentoTrabajo = dptoTra.getNIdDepartamentoPk();  
            this.idProvinciaTrabajo = provinciaTra.getNIdProvinciaPk();
            this.idDistritoTrabajo = distritoTra.getNIdDistritoPk();     
            
            this.cargaComboDepartamentosComun(this.idPaisTrabajo);      
            this.listaDepartamentosSelectItemTraba = this.listaDepartamentosSelectItemGeneral ; 

            this.cargaComboProvinciasComun(this.idDepartamentoTrabajo);      
            this.listaProvinciasSelectItemTraba = this.listaProvinciasSelectItemGeneral;

            this.cargaComboDistritosComun(this.idProvinciaTrabajo);
            this.listaDistritosSelectItemTraba = this.listaDistritosSelectItemGeneral;  
            
            //Demas datos de la Empresa
            this.setCentroTrabajo(cliente.getVCentroTrabajoCte());
            this.setDireccionTrabajo(cliente.getVDirCentroTrabajCte());
            this.setFonoFijoTrabajo(cliente.getVFonoCentroTrabajoCte());
            this.setReferenciaDireccionTrabajo(cliente.getVReferenciaDirCentrotrabajo());
            this.setOtrosCentroTrabajo(cliente.getvOtrosCentroTrabajo());
            
        }                 
        //guardamos el DNI y RUC
        this.dni_Editar = cliente.getNDniCte();                
        this.ruc_Editar = cliente.getVRucCte();
    }
    
    public void clean(ActionEvent event){ 
        this.limpiarBean();
    }
    
    //limpiar tambien se llama desde el cliente(AJAX) y no se hace x java script, ya que necesitamos cargar los combos iniciales desde la BD
    private void limpiarBean(){    
        
        //Limpieza tanto para la Vista 
        this.idCliente = null;
        this.nomCliente = "";   
        this.apePaterno = "";
        this.apeMaterno = "";
        this.dni = null; //ya que es numerico  
        this.ruc = null;
      //  this.razonSocial = "";
        this.email = "";
        this.fechaNacimiento = null;
        this.estadoCivil = "E"; //Escoger
        this.numeroMovistar = "";
        this.numeroClaro = "";
        this.numeroNextel = "";
        this.numeroRPM = "";
        this.numeroRPC = "";
        this.direccionDomicilio = "";
        this.fonoFijoDomicilio = "";
        this.referenciaDireccionDomicilio = "";
        this.rbEsCasaPropia = ""; // se deja en blanco para que el radio Button este sin ninguna opcion seleccionada
        this.comentarios = "";
        
        
        this.centroTrabajo = "";
        this.direccionTrabajo = "";
        this.fonoFijoTrabajo = "";
        this.referenciaDireccionTrabajo = "";
        this.otrosCentroTrabajo = "";
        
        //No cargamos denuevo las ocupaciones,usamos las que ya estaban cargadas, solo ponemos el valor x defecto del combo a Escoger
        this.idOcupacion = 0;//Escoger         
        this.rbEstadoOcupacion = ""; // se deja en blanco para que el radio Button este sin ninguna opcion seleccionada
        
        //Limpieza del Entitie
        //Centro Trabajo
        this.tClientes.setNIdPaisCentroTrabajoFk(null);
        this.tClientes.setNIdDptoCentroTrabajoFk(null);
        this.tClientes.setNIdProvinciaCentroTrabaFk(null);
        this.tClientes.setNIdDistritoCentroTrabaFk(null);
        
        this.tClientes.setVCentroTrabajoCte("");
        this.tClientes.setVDirCentroTrabajCte("");        
        this.tClientes.setVFonoCentroTrabajoCte("");          
        this.tClientes.setVReferenciaDirCentrotrabajo("");
        this.tClientes.setvOtrosCentroTrabajo("");            
       
        
        //Cargamos por defecto los combos con PERU, AREQUIPA, AREQUIPA, AREQUIPA (ID = 1) DOMICILIO y TRABAJO
        Short idPa, idDpto, idProvin;
        idPa = idDpto = idProvin = 1;
        this.cargarCombosIniciales(idDpto, idProvin, idPa);
        
        this.clienteExiste = "";
        this.clienteExiste2 = "";
    }     
    
    public void cargaComboDepartamentosDomici(ActionEvent event)
    {
        this.cargaComboDepartamentosComun(this.idPaisDomicilio);      
        this.listaDepartamentosSelectItemDomici = this.listaDepartamentosSelectItemGeneral;               
    }
     
    public void cargaComboProvinciasDomici(ActionEvent event)
    { 
        this.cargaComboProvinciasComun(this.idDepartamentoDomicilio);      
        this.listaProvinciasSelectItemDomici = this.listaProvinciasSelectItemGeneral;               
    }
    
    public void cargaComboDistritosDomici(ActionEvent event)
    {       
        this.cargaComboDistritosComun(this.idProvinciaDomicilio);
        this.listaDistritosSelectItemDomici = this.listaDistritosSelectItemGeneral;
    }
    
    public void cargaComboDepartamentosTraba(ActionEvent event)
    {
        this.cargaComboDepartamentosComun(this.idPaisTrabajo);      
        this.listaDepartamentosSelectItemTraba = this.listaDepartamentosSelectItemGeneral ;               
    }
     
    public void cargaComboProvinciasTraba(ActionEvent event)
    { 
        this.cargaComboProvinciasComun(this.idDepartamentoTrabajo);      
        this.listaProvinciasSelectItemTraba = this.listaProvinciasSelectItemGeneral;
    }
    
    public void cargaComboDistritosTraba(ActionEvent event)
    {        
        this.cargaComboDistritosComun(this.idProvinciaTrabajo);
        this.listaDistritosSelectItemTraba = this.listaDistritosSelectItemGeneral;             
    }
        
    private void cargaComboDepartamentosComun(Short idPais)
    {        
        TPaises pais;
        List<TPaises> listaBeansPaisesConDptos;
        
        listaBeansPaisesConDptos = this.paisServiceHibernateImpl.findPaisConDptos(idPais); //traemos todos los dptos para ser seteados y usados en el combo    
        pais = listaBeansPaisesConDptos.get(0);//Solo debe traer un objeto Pais.
        
        this.listaBeansDepartamentosGeneral = pais.getTDepartamentosList();       
      
        this.listaDepartamentosSelectItemGeneral = utileria.convertListBeansDepartamentosToSelectItem(this.listaBeansDepartamentosGeneral) ;               
    }
     
    private void cargaComboProvinciasComun(Short idDpto)
    {
        //Falta limpiar/cargar combo Distritos ..............
        TDepartamentos departamento;
        List<TDepartamentos> listaBeansDptosConProvincias;
        
        listaBeansDptosConProvincias = this.departamentoServiceHibernateImpl.findDptosConProvincias(idDpto); 
        departamento = listaBeansDptosConProvincias.get(0);//Solo debe traer un objeto.
        
        this.listaBeansProvinciasGeneral = departamento.getTProvinciasList();       
      
        this.listaProvinciasSelectItemGeneral = utileria.convertListBeansProvinciasToSelectItem(this.listaBeansProvinciasGeneral) ;               
    }
    
    private void cargaComboDistritosComun(Short idProvincia)
    {        
        TProvincias provincia;
        List<TProvincias> listaBeansProvinciasConDistritos;
        
        listaBeansProvinciasConDistritos = this.provinciaServiceHibernateImpl.findProvinciasConDistritos(idProvincia);
        provincia = listaBeansProvinciasConDistritos.get(0);//Solo debe traer un objeto.
        
        this.listaBeansDistritosGeneral = provincia.getTDistritosList();       
      
        this.listaDistritosSelectItemGeneral = utileria.convertListBeansDistritosToSelectItem(this.listaBeansDistritosGeneral) ;               
    }

}
